Komponenty InterBase Express a transakce

Otázka od: Tomas Bradle

10. 5. 2004 16:57

Zdravim vsechny,

potykam se s nasledujicim problemem:
mam formular, na nem grid napojeny na TIBQuery. Z tohodle formu volam
modalni form na vlozeni dalsiho zaznamu, ktery ma na sobe TIBTable, na
kterou se aplikuje INSERT, vlozi se tam nejake preddefinovane hodnoty a
necha se napsat uzivatelem do nekolika TDBEditu vkladane hodnoty. Po zavreni
modalniho formu v pripade mrOK se provede POST a doplneni nejakych dalsich
hodnot do vkladaneho zaznamu. V ramci te same transakce se uklada taky
nejaka hodnota do uplne jine tabulky (napr jmenem PARAMS) pres TIBQuery (je
tam prikaz update). Po provedeni CommitRetaining otevru tu tabulku PARAMS
(TIBQuery: SELECT * where ... ) a tam neni updatovana ta zapsana hodnota.
Vsechny IB-komponenty jsou pod jednou transakci.

Nevi nekdo cim by to mohlo byt ?

V souvislosti s timto problemem si pokladam nasledujici otazky:
Kolik transakci v jedne aplikaci nad jednou databazi ?
Staci jedna nebo jsou nejaka pravidla na co by mela byt samostatna transakce
?
Je lepsi mit pro IB komponenty pro GRIDy jinou transakci nez pro zapisy
(UPDATE, INSERT, STOREDPROC) ?
Nemuze byt chyba v komponentach samotnych ?

(D5, Interbase 6)

Diky za odpoved na jakoukoliv otazku.

Tomas Bradle
t.bradle@worldonline.cz



Odpovedá: Jaroslav Uher

10. 5. 2004 19:27

On 10 May 2004 at 17:23, Tomas Bradle wrote:

> V souvislosti s timto problemem si pokladam nasledujici otazky:
> Kolik transakci v jedne aplikaci nad jednou databazi ?
> Staci jedna nebo jsou nejaka pravidla na co by mela byt samostatna
> transakce ? Je lepsi mit pro IB komponenty pro GRIDy jinou transakci
> nez pro zapisy (UPDATE, INSERT, STOREDPROC) ?

na Tvuj predchazejici problem nevim odpoved. IBTable jsem nikdy
nepouzil. Jen IBQuery.
Ale uz 3 roky pracuji s FB a zasadne oddeluji INSERT, UPDATE, DELETE
od tabulky napojene na DBGrid.
Vzdy pouzivam bud SP (nebo IBSQL) + samostatna transakce.
Potom samozrejme Close, Open a Locate.

Nevzpominam si, ze bych mel nekdy s timto resenim problem.
Je to vice "rucni prace", ale...

Jarek Uher

Odpovedá: Lebeda David

11. 5. 2004 6:55

> jmenem PARAMS) pres TIBQuery (je tam prikaz update). Po provedeni
> CommitRetaining otevru tu tabulku PARAMS (TIBQuery: SELECT * where ...
> ) a tam neni updatovana ta zapsana hodnota. Vsechny IB-komponenty jsou
> pod jednou transakci.
>
> Nevi nekdo cim by to mohlo byt ?

Ahoj,

to opravdu nevim. Veskere zmeny, ktere transakce udela, jsou uvnitr te
transakce
dostupne, takze to, co popisujes, mi prijde divne - pokud tedy jedes opravdu v
jedne
transakci.

> Kolik transakci v jedne aplikaci nad jednou databazi ?
> Staci jedna nebo jsou nejaka pravidla na co by mela byt samostatna
> transakce ?

Pokud jde o pocet transakci, tak nevim o nejakem limitu. Faktem ale je, ze
transakce by
mely byt co nejkratsi, zejmena ty, ktere neco modifikuji. Naopak jen cteci
transakce
(napr. pro gridy) by mely mit nastaveno, ze jsou jen pro cteni (dvojklik na
komponentu
TIBTransakce, nastavit Read Commited a do parametru pripsat slovo Read).

No a ja osobne jsem si zvykl mit ke kazdemu datasetu svou vlastni komponentu
transakce - tedy az na vyjimky, kdy chci z vice datasetu udelat neco v jedne
transakci.
Podle meho nazoru maji sdilene transakce obdobne nectnosti jako globalni
promenne -
nekde neco s transakci provedes a na uplne jinem miste se ni neco naprosto
necekane
rozhasi, protoze si neuvedomis, ze i tam jsi ten globalni objekt pouzil...Tj.
kdyz to dobre
pouzivas, je to OK, ale musis pri kazdem pouziti zvazovat, jestli to opravdu i
v tom
konkretnim pripade neovlivni neco jineho...

Prakticky tedy mam browse formular s gridem (read only) - jedna transakce s
parametrem READ, jiny dataset s jinou transakci pro delete. Pro vkladani a
editaci jiny
formular - opet se svou transakci. Transakce pro mazani, editaci a insert bezi
jen
chvilku:

Tr.StartTransaction;
try
 ibsql.sql.text := 'delete from tabulka where id = xxx';
 ibsql.ExecQuery;
 Tr.Commit;
except
 Tr.Rollback;
 ...pak teprve hlaseni o chybe
end;
 
A nasledne refresh gridu vcetne Commit a noveho StartTransaction transakce pro
grid.
No a protoze transakce pro grid se pouziva jen pro grid, nemusim mit strach, ze
tim
commitem si pozaviram kdovijake datasety v jinych zakoutich programu.

David Lebeda

Odpovedá: Ludek Paral

11. 5. 2004 8:49

Prakticky tedy mam browse formular s gridem (read only) - jedna transakce s
parametrem READ, jiny dataset s jinou transakci pro delete. Pro vkladani a
editaci jiny
formular - opet se svou transakci. Transakce pro mazani, editaci a insert
bezi jen
chvilku:


- kdyz jsem se ja pokusil dat pro cteni jinou transakci (read-committed),
tak jsem prave dostaval hlasku "lock on nowait transaction". Kdyz mam vse
pod jednou transakci, tak mi to funguje.Zkusim pridat rucne parametr "read"
a dam vedet.

Ludek


Odpovedá: Tomas Bradle

11. 5. 2004 22:54

Dekuji vsem za zajimave namety.

Dneska jsem s tim laboroval a misto TIBQuery (select * from params) jsem dal
TIBDataSet a ten mi byl schopen vratit tu updatovanou hodnotu. Jinak jsem
nedelal zadne zmeny. Pochopil jsem teda, ze je asi potreba mit nejakou
defaultni transakci na gridy a zmeny provadet v jinych transakcich a
potvrzovat je metodou commit misto commitretaining. Tudiz na ulozeni dat
zakaznika jednu transakci, na ulozeni faktury jinou (hlavicka-detaily) apod.

Tomas Bradle
t.bradle@worldonline.cz


----- Original Message -----
From: "Ludek Paral" <ludek.paral@quick.cz>
To: <delphi-l@clexpert.cz>
Sent: Tuesday, May 11, 2004 8:56 AM
Subject: Re: Komponenty InterBase Express a transakce


> Prakticky tedy mam browse formular s gridem (read only) - jedna transakce
s
> parametrem READ, jiny dataset s jinou transakci pro delete. Pro vkladani a
> editaci jiny
> formular - opet se svou transakci. Transakce pro mazani, editaci a insert
> bezi jen
> chvilku:
>
>
> - kdyz jsem se ja pokusil dat pro cteni jinou transakci (read-committed),
> tak jsem prave dostaval hlasku "lock on nowait transaction". Kdyz mam vse
> pod jednou transakci, tak mi to funguje.Zkusim pridat rucne parametr
"read"
> a dam vedet.
>
> Ludek
>
>
>